package com.opc.Config;


import com.opc.properties.ScheduledTask;
import com.opc.quarz.*;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class
QuartzConfig {
    @Autowired
    private ScheduledTask scheduledTask;

    @Bean
    public JobDetail JobDetailForHeartbeat1(){
        return JobBuilder.newJob(HeartBeatQuartz1.class)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();//调用build方法构建JobDetail对象并返回。
    }

    @Bean
    public Trigger jobTriggerForHeartbeat1() {
        // 创建一个 Trigger，立即执行任务，并在完成后不重复
        return TriggerBuilder.newTrigger()
                .forJob(JobDetailForHeartbeat1())
                .startNow() // 立即开始
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withRepeatCount(0)) // 不重复
                .build(); // 构建 Trigger 对象
    }

    @Bean
    public JobDetail JobDetailForHeartbeat2(){
        return JobBuilder.newJob(HeartBeatQuartz2.class)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();//调用build方法构建JobDetail对象并返回。
    }

    @Bean
    public Trigger jobTriggerForHeartbeat2() {
        // 创建一个 Trigger，立即执行任务，并在完成后不重复
        return TriggerBuilder.newTrigger()
                .forJob(JobDetailForHeartbeat2())
                .startNow() // 立即开始
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withRepeatCount(0)) // 不重复
                .build(); // 构建 Trigger 对象
    }

    @Bean
    public JobDetail JobDetailForHeartbeat3(){
        return JobBuilder.newJob(HeartBeatQuartz3.class)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();//调用build方法构建JobDetail对象并返回。
    }

    @Bean
    public Trigger jobTriggerForHeartbeat3() {
        // 创建一个 Trigger，立即执行任务，并在完成后不重复
        return TriggerBuilder.newTrigger()
                .forJob(JobDetailForHeartbeat3())
                .startNow() // 立即开始
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withRepeatCount(0)) // 不重复
                .build(); // 构建 Trigger 对象
    }

    @Bean
    public JobDetail JobDetailForHeartbeat4(){
        return JobBuilder.newJob(HeartBeatQuartz4.class)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();//调用build方法构建JobDetail对象并返回。
    }

    @Bean
    public Trigger jobTriggerForHeartbeat4() {
        // 创建一个 Trigger，立即执行任务，并在完成后不重复
        return TriggerBuilder.newTrigger()
                .forJob(JobDetailForHeartbeat4())
                .startNow() // 立即开始
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withRepeatCount(0)) // 不重复
                .build(); // 构建 Trigger 对象
    }

    @Bean
    public JobDetail JobDetailForInsertHingeScrewData(){
        return JobBuilder.newJob(InsertHingeScrewDataQuartz.class)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();//调用build方法构建JobDetail对象并返回。
    }

    @Bean
    public Trigger jobTriggerForInsertHingeScrewData() {
        // 创建一个 Trigger，立即执行任务，并在完成后不重复
        return TriggerBuilder.newTrigger()
                .forJob(JobDetailForInsertHingeScrewData())
                .startNow() // 立即开始
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withRepeatCount(0)) // 不重复
                .build(); // 构建 Trigger 对象
    }

    @Bean
    public JobDetail JobDataCleanupJobDetail(){
        //调用JobBuilder.newJob方法创建JobBuilder对象，
        // 传入OnDutyQuartz.class作为要执行的工作。
        return JobBuilder.newJob(DataCleanup.class) //绑定要执行的工作(quartz的OnDutyQuartz类)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();
    }

    @Bean
    public Trigger JobTriggerForDataCleanup(){
        ScheduleBuilder<CronTrigger> schedBuilder = //每分钟生成一次// 每月15日下午16:15触发0 15 16 15 * ?
                                                    // 每月1日上午6:00触发"0 0 6 1 * ?"
                CronScheduleBuilder.cronSchedule(scheduledTask.getDataCleanup());//0/8 * * * * ?//0 0 10 * * ?
        return TriggerBuilder.newTrigger()
                .forJob(JobDataCleanupJobDetail()) // 绑定对应的工作明细
                .withSchedule(schedBuilder)
                .build();//调用build方法构建Trigger对象并返回
    }

    //每天每个车型每50台车取8粒存进数据库
    @Bean
    public JobDetail JobSampledDataJobDetail(){
        //调用JobBuilder.newJob方法创建JobBuilder对象，
        // 传入OnDutyQuartz.class作为要执行的工作。
        return JobBuilder.newJob(SampledData8.class) //绑定要执行的工作(quartz的OnDutyQuartz类)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();
    }

    @Bean
    public Trigger JobTriggerForSampledData(){
        ScheduleBuilder<CronTrigger> schedBuilder = //每分钟生成一次// 每月15日下午16:15触发0 15 16 15 * ?
                //  每天上午5:00触发0 0 5 * * ?
                CronScheduleBuilder.cronSchedule(scheduledTask.getSampledData());//0/8 * * * * ?//0 0 10 * * ?
        return TriggerBuilder.newTrigger()
                .forJob(JobSampledDataJobDetail()) // 绑定对应的工作明细
                .withSchedule(schedBuilder)
                .build();//调用build方法构建Trigger对象并返回
    }

//    @Bean
//    public List<Trigger> multipleTriggersForSampledData() {
//        List<Trigger> triggers = new ArrayList<>();
//
//        // 每天上午5:00触发
//        CronScheduleBuilder schedBuilder1 = CronScheduleBuilder.cronSchedule
//                ("0/15 * * * * ?");//0/8 * * * * ?//0 0 5 * * ?
//        Trigger trigger1 = TriggerBuilder.newTrigger()
//                .forJob(JobSampledDataJobDetail()) // 绑定对应的工作明细
//                .withSchedule(schedBuilder1)
//                .withIdentity("trigger1", "group1") // 给trigger设置一个名称和组名
//                .build();
//        triggers.add(trigger1);
//
//        // 每天上午10:00触发
//        CronScheduleBuilder schedBuilder2 = CronScheduleBuilder.cronSchedule
//                ("0/8 * * * * ?");//0/8 * * * * ?//0 0 10 * * ?
//        Trigger trigger2 = TriggerBuilder.newTrigger()
//                .forJob(JobSampledDataJobDetail()) // 绑定对应的工作明细
//                .withSchedule(schedBuilder2)
//                .withIdentity("trigger2", "group1") // 给trigger设置一个名称和组名
//                .build();
//        triggers.add(trigger2);
//
//        // 可以继续添加更多的trigger
//
//        return triggers;
//    }


    @Bean
    public JobDetail JobTorqueCheckExportJobDetail(){
        //调用JobBuilder.newJob方法创建JobBuilder对象，
        // 传入OnDutyQuartz.class作为要执行的工作。
        return JobBuilder.newJob(TorqueCheckExport.class) //绑定要执行的工作(quartz的OnDutyQuartz类)
                .storeDurably() // 持久化操作(即使没有Trigger与之关联，
                // 也不会从Scheduler中删除该JobDetail。)
                .build();
    }

    @Bean
    public Trigger JobTriggerForTorqueCheckExport(){
        ScheduleBuilder<CronTrigger> schedBuilder = //每分钟生成一次// 每月15日下午16:15触发0 15 16 15 * ?
                // 每个月的 1 号凌晨 5:30 点执行一次任务0 30 5 1 * ?
                CronScheduleBuilder.cronSchedule(scheduledTask.getCheckExport());//0/8 * * * * ?//0 0 10 * * ?
        return TriggerBuilder.newTrigger()
                .forJob(JobTorqueCheckExportJobDetail()) // 绑定对应的工作明细
                .withSchedule(schedBuilder)
                .build();//调用build方法构建Trigger对象并返回
    }

}
